/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.monopoly.comunicazione;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

/**
 *
 * @author Administrator
 */
public class ThreadCliente extends Thread {

    Socket s;
    Utente utente = null;
    boolean daInviare = false;
    Messaggio messaggio = null;

    public ThreadCliente(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        try {
            ObjectOutputStream o = new ObjectOutputStream(s.getOutputStream());
            ObjectInputStream i = new ObjectInputStream(s.getInputStream());
//            System.out.println("-->Nuovo Cliente!!!");
            while (true) {
                Thread.sleep(10);
                if(daInviare == true){
                    o.writeObject(messaggio);
                    o.flush();
                    messaggio = null;
                    daInviare = false;
                    System.out.println("---> INVIATOOOOO");
                }
                if (s.getInputStream().available() != 0) {
                    //Significa che é arrivato un oggetto
                    Object obj = i.readObject();
                    Messaggio arrivo = (Messaggio) obj;
                    arrivo.stampa();
                    if("Login".equals(arrivo.getAzione())){
                        Utente u = new Utente();
                        u.setUsername(arrivo.getParametri().get("Username"));
                        u.setPassword(arrivo.getParametri().get("Password"));
                        utente = u;
                        Messaggio risposta = new Messaggio();
                        risposta.addDestinatario(u);
                        risposta.setAzione("LoginRisposta");
                        risposta.getParametri().add(new Elemento("Risposta", "Vero"));
                        VariabiliGlobali.messaggi.addMessaggioDaInviare(risposta);

                        //Aggiungo l'utente alla stanza principale
                        VariabiliGlobali.stanze.getStanze().get(0).addUtente(utente);
                        
                        //Poi devo inviargli le stanze con gli utenti (a tutti!!)
                        MessaggioStanze stanze = new MessaggioStanze();
                        stanze.setDestinatari(VariabiliGlobali.stanze.getTuttiUtenti());
                        stanze.riempi();
                        VariabiliGlobali.messaggi.addMessaggioDaInviare(stanze);
                    }
                    else if("ListaStanze".equals(arrivo.getAzione())){
                        MessaggioStanze stanze = new MessaggioStanze();
                        stanze.setDestinatari(VariabiliGlobali.stanze.getTuttiUtenti());
                        stanze.riempi();
                        VariabiliGlobali.messaggi.addMessaggioDaInviare(stanze);
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean isDaInviare() {
        return daInviare;
    }

    public void setDaInviare(boolean daInviare) {
        this.daInviare = daInviare;
    }

    public Messaggio getMessaggio() {
        return messaggio;
    }

    public void setMessaggio(Messaggio messaggio) {
        this.messaggio = messaggio;
    }

    public Socket getS() {
        return s;
    }

    public void setS(Socket s) {
        this.s = s;
    }

    public Utente getUtente() {
        return utente;
    }

    public void setUtente(Utente utente) {
        this.utente = utente;
    }

    
}
